package com.ruoyi.merchant.domain.dto;

import java.math.BigDecimal;
import java.util.Date;
import javax.validation.constraints.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

/**
 * 创建优惠券DTO
 * 
 * @author xperia
 */
@Data
public class CouponCreateDTO {

    /** 优惠券名称 */
    @NotBlank(message = "优惠券名称不能为空")
    @Size(max = 200, message = "优惠券名称长度不能超过200个字符")
    private String couponName;

    /** 优惠券类型：1-满减券，2-折扣券，3-免费券，4-新用户券 */
    @NotNull(message = "优惠券类型不能为空")
    @Min(value = 1, message = "优惠券类型值错误")
    @Max(value = 4, message = "优惠券类型值错误")
    private Integer couponType;

    /** 优惠金额（满减券使用） */
    @DecimalMin(value = "0.01", message = "优惠金额必须大于0")
    private BigDecimal discountAmount;

    /** 折扣率（折扣券使用，如0.8表示8折） */
    @DecimalMin(value = "0.01", message = "折扣率必须大于0")
    @DecimalMax(value = "0.99", message = "折扣率必须小于1")
    private BigDecimal discountRate;

    /** 最低订单金额 */
    @NotNull(message = "最低订单金额不能为空")
    @DecimalMin(value = "0.00", message = "最低订单金额不能为负数")
    private BigDecimal minOrderAmount;

    /** 最高优惠金额 */
    @DecimalMin(value = "0.00", message = "最高优惠金额不能为负数")
    private BigDecimal maxDiscountAmount;

    /** 发放总数量 */
    @NotNull(message = "发放总数量不能为空")
    @Min(value = 1, message = "发放总数量必须大于0")
    private Integer totalQuantity;

    /** 每用户限领数量 */
    @NotNull(message = "每用户限领数量不能为空")
    @Min(value = 1, message = "每用户限领数量必须大于0")
    private Integer perUserLimit;

    /** 有效期开始时间 */
    @NotNull(message = "有效期开始时间不能为空")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date validStartTime;

    /** 有效期结束时间 */
    @NotNull(message = "有效期结束时间不能为空")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date validEndTime;

    /** 领取开始时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date receiveStartTime;

    /** 领取结束时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date receiveEndTime;

    /** 适用范围：1-全部商品，2-指定商品，3-指定分类 */
    @NotNull(message = "适用范围不能为空")
    @Min(value = 1, message = "适用范围值错误")
    @Max(value = 3, message = "适用范围值错误")
    private Integer applicableScope;

    /** 范围ID列表（商品ID或分类ID，逗号分隔） */
    private String scopeIds;

    /** 优惠券描述 */
    @Size(max = 1000, message = "优惠券描述长度不能超过1000个字符")
    private String description;

    /** 使用规则 */
    @Size(max = 1000, message = "使用规则长度不能超过1000个字符")
    private String usageRules;
}

